package szxy.base.day01;

/*
    常量：在java程序运行过程中，其值不能够发送改变的量

    分类：
        字面值常量：
            字符串常量：被双引号括起来的字符序列  "java"
            字符常量：被单引号括起来的单个字符  'a'
            整数常量：所有的整数 100 200 -100
            小数常量：所有的小数 1.23  3.14  -1.23
            布尔常量：true  false
            空常量：null（数组的时候讲）
        自定义常量：（面向对象的时候讲）


    java针对整数常量，提供了4种表现形式
        二进制：由0，1构成，逢2进1，由0b开头
        八进制：由0，1，2，3，4，5，6，7构成，逢8进1，由0开头
        十进制：由0，1，2，3，4，5，6，7，8，9构成，逢10进1，java中整数默认是十进制的
        十六进制：由0，1，2，3，4，5，6，7，8，9，a，b，c，d，e，f构成，逢16进1，由0x开头

    进制之间的转换：
        1、其他进制转十进制？
            （十进制）12345   ->   （十进制）12345
            12345 = 10000 + 2000 + 300 + 40 + 5
                  = 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0
                  = 10000 + 2000 + 300 + 40 + 5
                  = 12345
            规律：系数*原进制的指数次幂的和
            （二进制）100 -> （十进制）4
            100 = 1*2^2 + 0*2^1 + 0*2^0
                = 4

        2、十进制转其他进制？
            规律：除基取余数，知道商为0，余数反转
            （十进制）64 -> （八进制）
                64/8=8....0
                8/8=1.....0
                1/8=0.....1
            余数反转：0100

        3、十进制与二进制之间的快速转换 8421码
           （二进制）10100 -> 1*2^4 + 1*2^2 = 20（十进制）

           一个字节：8位
           1byte = 8bit
           1kb = 1024byte
           1mb = 1024kb
           1gb = 1024mb
           1tb = 1024gb
           1pb = 1024tb

         (二进制)1    1   1   1   1   1   1   1
         (十进制)128  64  32  16  8   4   2   1

       4、其他进制与其他进制（举例：二进制->八进制）
            做法1：先转10进制，再转八进制
            做法2：从右向左，每3位一组合，最左边的够，用0补齐，算每一组合的进制结果，拼接
            10100(二进制) => 20(十进制) => 24(八进制)

    注意：
        1、默认情况下，idea输出的结果是转化成十进制的结果
        2、学习进制的目的是为了学习二进制与十进制的关系，因为2进制是计算机的语言，而10进制是我们人类的语言

 */
public class ConstantDemo1 {
    public static void main(String[] args) {
        //需求：输出二进制，八进制，十进制，十六进制的100
        System.out.println(0b100);
        System.out.println(0100);
        System.out.println(100);
        System.out.println(0x100);
    }
}
